package com.ysx.teacher.day20210906;


public class Ch04 {

    public static void main(String[] args) {

        // 三位数 各个位 上立方之和等于1099的数输出 ..

        int begin=100;
        int end=999;
        int result=1099;
        //对于用户来说 你只能让用户调用1次方法
        int[] rs = getResult(begin,end,result);

        System.out.println(rs.length);
    }

    public static int[] getResult(int begin,int end,int result){

        //长度 num用来记录原来的数组中有几个符合条件的数
        int num=0;
        int[] rs = getCubeNumber(begin,end,result);
        for(int index=0;index<rs.length;index++){
            if(rs[index]!=0){
                num++;
            }
        }

        int[] jieguo = new int[num];

        for(int index=0;index<jieguo.length;index++){
            jieguo[index]=rs[index];
        }


        return jieguo;

    }

    /**
     *
     * @param begin 开始
     * @param end   结束
     * @param result 结果
     * @return
     */
    public static int[] getCubeNumber(int begin,int end,int result){

        // 0 入参检测 代码检视
        if(begin<100 || end>=1000 || result<=0){
            return null;
        }

        // 1 根据事情情况准备好承载结果的数组
        int len=end-begin+1;
        int[] array = new int[len];


        int index=0;

        for(int number=begin;number<=end;number++){
            int first= Ch03.getNumberByPosition(number,1);
            int second=Ch03.getNumberByPosition(number,2);
            int third=Ch03.getNumberByPosition(number,3);

            int cube=3;
            int rs=getNumber(first,cube)+getNumber(second,cube)+getNumber(third,cube);
            if(rs == result){

                //满足条件 往数组中增加
                array[index]=number;
                index++;
            }
        }
        return array;
    }


    /**
     * 兼容求平方和求立方
     * @param number
     * @param cube
     * @return
     */
    public static int getNumber(int number,int cube){

        //1 入参检测 根据具体的需求 cube<2 强制规定最少要算平方 立方..
        if(number>=10 || number<0 || cube<2){
            return -1;
        }

        int rs=1;
        for(int index=1;index<=cube;index++){
            rs=rs*number;
        }
        return rs;

    }
}
